package BloodTimeHybernateTest;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

import BloodTimeHybernateDO.ArticuloDO;
import BloodTimeHybernateDO.CiudadArticuloDO;
import BloodTimeHybernateDO.CiudadDO;


/**
 * 
 * @author Eduardo D. Sandoval V.
 * 
 */
public class TestCiudadArticuloDO {

	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure("/BloodTimeHybernateDO/hibernate.cfg.xml");
		SessionFactory sessionFactory = configuration.buildSessionFactory();

		// ------------------------------
		// Insert
		// ------------------------------

		Session session = sessionFactory.openSession();
		session.beginTransaction();
		ArticuloDO articulo = new ArticuloDO();
		CiudadDO ciudad = new CiudadDO();
		for (int i = 0; i < 10; i++) {
			CiudadArticuloDO ciudadarticulo = new CiudadArticuloDO();
			ciudadarticulo.setArticuloId(articulo);
			ciudadarticulo.setCiudadId(ciudad);
			ciudad.getCiudadArticuloList().add(ciudadarticulo);
			articulo.getCiudadArticuloList().add(ciudadarticulo);
			session.save(ciudadarticulo);
		}
		session.save(ciudad);
		session.save(articulo);

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
		// Load
		// ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		CiudadArticuloDO ciudadarticulo = new CiudadArticuloDO();

		ciudadarticulo = null;
		ciudadarticulo = (CiudadArticuloDO) session.load(CiudadArticuloDO.class, 1);

		System.out.println("Load CiudadArticulo");
		System.out.println("Id: " + ciudadarticulo.getId());

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
		// Query
		// ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		Query query;

		ciudadarticulo = null;
		query = session.createQuery("FROM CiudadArticuloDO WHERE id = :ciudadarticuloId");
		query.setParameter("ciudadarticuloId", 1);

		ciudadarticulo = (CiudadArticuloDO) query.uniqueResult();

		System.out.println("Query CiudadArticulo 1");
		System.out.println("Id: " + ciudadarticulo.getId());

		// ---------------------------------------------------------------
		// Delete
		// ---------------------------------------------------------------

		session.delete(ciudadarticulo);

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
		// List
		// ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		System.out.println("List CiudadArticulo");

		List<CiudadArticuloDO> list = session.createCriteria(CiudadArticuloDO.class).list();
		for (CiudadArticuloDO ciudadarticuloDO : list) {
			System.out.println("Id: " + ciudadarticuloDO.getId());

		}

		session.getTransaction().commit();
		session.close();
	}

}
